using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Negocio.Controladora;
using Entidades;

namespace VtasMkt.Ventas.Cliente
{
    public partial class frmAdministrarCliente : Form
    {
        #region Variables y constantes

        // DataTable que se empleara para la vista previa de la impresion
        DataTable dtImp = new DataTable();

        #endregion

        #region Eventos del formulario

        // Constructor del formulario
        public frmAdministrarCliente()
        {
            InitializeComponent();
        }

        // Al cargar el formulario
        private void AdministrarCliente_Load(object sender, EventArgs e)
        {
            CargarComboBox();
            if (FiltroValido())
            {
                MostrarInfoGrilla();
            }
        }

        // Ejecuta la busqueda de registros
        private void btnBuscar_Click(object sender, EventArgs e)
        {
            if (FiltroValido())
            {
                MostrarInfoGrilla();
            }
        }

        // Muestra el formulario de vista previa para impresion
        private void btnImprimir_Click(object sender, EventArgs e)
        {
            // Prepara el DataSet para la vista previa
            dsCliente dsClient = new dsCliente();
            dsClient.dtCliente.Merge(dtImp);
            
            // Muestra el formulario de vista previa con el reporte
            VtasMkt.General.frmVerReporte verRptWin = new VtasMkt.General.frmVerReporte(dsClient);
            verRptWin.MdiParent = frmMain.ActiveForm;
            verRptWin.Show();
        }

        // Nuevo registro
        private void btnNuevo_Click(object sender, EventArgs e)
        {
            Entidades.Cliente oCliente = new Entidades.Cliente();
            oCliente.CodigoCliente = 0; // Nuevo registro

            VtasMkt.Ventas.Cliente.frmRegistrarCliente regClienteWin = new VtasMkt.Ventas.Cliente.frmRegistrarCliente(oCliente);
            regClienteWin.Tag = AccionMnt.NuevoRegistro;
            //regClienteWin.MdiParent = frmMain.ActiveForm;
            regClienteWin.ShowDialog();

            if (FiltroValido())
            {
                MostrarInfoGrilla();
            }
        }

        // Edita el registro
        private void btnEditar_Click(object sender, EventArgs e)
        {
            if (dgvMain.SelectedRows.Count > 0)
            {
                Entidades.Cliente oCliente = new Entidades.Cliente();
                oCliente.CodigoCliente = (int)(this.dgvMain.SelectedRows[0].Cells[0].Value);

                VtasMkt.Ventas.Cliente.frmRegistrarCliente regClienteWin = new VtasMkt.Ventas.Cliente.frmRegistrarCliente(oCliente);
                regClienteWin.Tag = AccionMnt.EditarRegistro;
                //regClienteWin.MdiParent = frmMain.ActiveForm;
                regClienteWin.ShowDialog();

                if (FiltroValido())
                {
                    MostrarInfoGrilla();
                }
            }
            else
            {
                MessageBox.Show("Se debe selecionar un registro.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        // Elimina el registro
        private void btnEliminar_Click(object sender, EventArgs e)
        {
            if (dgvMain.SelectedRows.Count > 0)
            {
                Entidades.Cliente oCliente = new Entidades.Cliente();
                oCliente.CodigoCliente = (int)(this.dgvMain.SelectedRows[0].Cells[0].Value);

                VtasMkt.Ventas.Cliente.frmRegistrarCliente regClienteWin = new VtasMkt.Ventas.Cliente.frmRegistrarCliente(oCliente);
                regClienteWin.Tag = AccionMnt.EliminarRegistro;
                //regClienteWin.MdiParent = frmMain.ActiveForm;
                regClienteWin.ShowDialog();

                if (FiltroValido())
                {
                    MostrarInfoGrilla();
                }
            }
            else
            {
                MessageBox.Show("Se debe selecionar un registro.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        // Cierra el formulario
        private void btnCerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        // Valida que solo se digiten numeros en el codigo del cliente
        private void txtCodigoCliente_KeyPress(object sender, KeyPressEventArgs e)
        {
            VtasMkt.General.RutinasGenericas rutGen = new VtasMkt.General.RutinasGenericas();
            short KeyAscii = (short)(rutGen.Asc(e.KeyChar));
            if (rutGen.SoloNumeros(KeyAscii) == true)
            {
                e.Handled = true;
            }
        }

        // Valida que solo se digiten numeros en el numero del documento
        private void txtNroDocumento_KeyPress(object sender, KeyPressEventArgs e)
        {
            VtasMkt.General.RutinasGenericas rutGen = new VtasMkt.General.RutinasGenericas();
            short KeyAscii = (short)(rutGen.Asc(e.KeyChar));
            if (rutGen.SoloNumeros(KeyAscii) == true)
            {
                e.Handled = true;
            }
        }

        #endregion

        #region Metodos privados

        // Valida el filtro
        private bool FiltroValido()
        {
            VtasMkt.General.RutinasGenericas rutGen = new VtasMkt.General.RutinasGenericas();

            // Numero del documento
            if (!rutGen.TextoSoloNumeros(this.txtNroDocumento.Text))
            {
                MessageBox.Show("El Nro del documento debe ser numerico.", this.Text, 
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return false;
            }

            // Codigo del cliente
            if (!rutGen.TextoSoloNumeros(this.txtCodigoCliente.Text))
            {
                MessageBox.Show("El Codigo del Cliente debe ser numerico.", this.Text,
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return false;
            }

            // Si todo esta ok
            return true;
        }

        // Obtiene y muestra la informacion en la grilla del formulario
        private void MostrarInfoGrilla()
        {
            try
            {
                // Obtiene la informacion y carga la grilla
                ActualizarCliente oCliente = new ActualizarCliente();
                DataTable dtp = oCliente.ListaCliente(cboTipoDocumento.SelectedValue.ToString(), txtNroDocumento.Text,
                    txtApellidoPaterno.Text, txtApellidoMaterno.Text, txtNombre.Text,
                    txtRazonSocial.Text, txtCodigoCliente.Text);
                dgvMain.DataSource = dtp;

                // Deja en memoria el DataTable para la impresion
                dtImp = dtp;

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        // Carga los comboboxs
        private void CargarComboBox()
        {
            try
            {
                // Obtiene la lista y agrega un item dummy para el filtro
                ActualizarCliente oCliente = new ActualizarCliente();
                DataTable dtInfo = oCliente.ListaTipoDocumento();
                dtInfo.Rows.InsertAt(dtInfo.NewRow(), 0);

                // Carga el combobox de tipo de documento
                cboTipoDocumento.DataSource = dtInfo;
                cboTipoDocumento.DisplayMember = "nTipoDocumento";
                cboTipoDocumento.ValueMember = "iTIpoDocumento";
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        #endregion
    }
}